/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package estates;

import estates.facade.*;
import estates.model.User;
import com.sun.rave.web.ui.appbase.AbstractPageBean;
import com.sun.webui.jsf.component.DropDown;
import com.sun.webui.jsf.component.TextField;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import estates.util.ParamGenerator;
import estates.validation.EmailValidator;
import estates.validation.StringLengthValidator;
import java.util.HashMap;
import javax.faces.FacesException;

/**
 * <p>Page bean that corresponds to a similarly named JSP page.  This
 * class contains component definitions (and initialization code) for
 * all components that you have defined on this page, as well as
 * lifecycle methods and event handlers where you may add behavior
 * to respond to incoming events.</p>
 *
 * @version useradd.java
 * @version Created on 2011-05-23, 14:29:32
 * @author Karol
 */
public class useradd extends AbstractPageBean {
  // <editor-fold defaultstate="collapsed" desc="Managed Component Definition">

  /**
   * <p>Automatically managed component initialization.  <strong>WARNING:</strong>
   * This method is automatically generated, so any user-specified code inserted
   * here is subject to being replaced.</p>
   */
  private void _init() throws Exception {
  }
  private TextField new_login = new TextField();

  public TextField getNew_login() {
    return new_login;
  }

  public void setNew_login(TextField tf) {
    this.new_login = tf;
  }
  private TextField new_password = new TextField();

  public TextField getNew_password() {
    return new_password;
  }

  public void setNew_password(TextField tf) {
    this.new_password = tf;
  }
  private TextField new_name = new TextField();

  public TextField getNew_name() {
    return new_name;
  }

  public void setNew_name(TextField tf) {
    this.new_name = tf;
  }
  private DropDown new_userType = new DropDown();

  public DropDown getNew_userType() {
    return new_userType;
  }

  public void setNew_userType(DropDown dd) {
    this.new_userType = dd;
  }
  private TextField new_regon = new TextField();

  public TextField getNew_regon() {
    return new_regon;
  }

  public void setNew_regon(TextField tf) {
    this.new_regon = tf;
  }
  private TextField new_pesel = new TextField();

  public TextField getNew_pesel() {
    return new_pesel;
  }

  public void setNew_pesel(TextField tf) {
    this.new_pesel = tf;
  }
  private TextField new_NIP = new TextField();

  public TextField getNew_NIP() {
    return new_NIP;
  }

  public void setNew_NIP(TextField tf) {
    this.new_NIP = tf;
  }
  private TextField new_city = new TextField();

  public TextField getNew_city() {
    return new_city;
  }

  public void setNew_city(TextField tf) {
    this.new_city = tf;
  }
  private TextField new_postCode = new TextField();

  public TextField getNew_postCode() {
    return new_postCode;
  }

  public void setNew_postCode(TextField tf) {
    this.new_postCode = tf;
  }
  private TextField new_street = new TextField();

  public TextField getNew_street() {
    return new_street;
  }

  public void setNew_street(TextField tf) {
    this.new_street = tf;
  }
  private TextField new_houseNr = new TextField();

  public TextField getNew_houseNr() {
    return new_houseNr;
  }

  public void setNew_houseNr(TextField tf) {
    this.new_houseNr = tf;
  }
  private TextField new_phone = new TextField();

  public TextField getNew_phone() {
    return new_phone;
  }

  public void setNew_phone(TextField tf) {
    this.new_phone = tf;
  }
  private TextField new_mail = new TextField();

  public TextField getNew_mail() {
    return new_mail;
  }

  public void setNew_mail(TextField tf) {
    this.new_mail = tf;
  }
  private TextField new_additionalInf = new TextField();

  public TextField getNew_additionalInf() {
    return new_additionalInf;
  }

  public void setNew_additionalInf(TextField tf) {
    this.new_additionalInf = tf;
  }
  // </editor-fold>
  StringLengthValidator slv = new StringLengthValidator(150);
  EmailValidator ev = new EmailValidator();

  public EmailValidator getEv() {
    return ev;
  }

  public void setEv(EmailValidator ev) {
    this.ev = ev;
  }

  public StringLengthValidator getSlv() {
    return slv;
  }

  public void setSlv(StringLengthValidator slv) {
    this.slv = slv;
  }

  /**
   * <p>Construct a new Page bean instance.</p>
   */
  public useradd() {
  }

  /**
   * <p>Callback method that is called whenever a page is navigated to,
   * either directly via a URL, or indirectly via page navigation.
   * Customize this method to acquire resources that will be needed
   * for event handlers and lifecycle methods, whether or not this
   * page is performing post back processing.</p>
   *
   * <p>Note that, if the current request is a postback, the property
   * values of the components do <strong>not</strong> represent any
   * values submitted with this request.  Instead, they represent the
   * property values that were saved for this view when it was rendered.</p>
   */
  @Override
  public void init() {
    // Perform initializations inherited from our superclass
    super.init();
    // Perform application initialization that must complete
    // *before* managed components are initialized
    // TODO - add your own initialiation code here

    // <editor-fold defaultstate="collapsed" desc="Managed Component Initialization">
    // Initialize automatically managed components
    // *Note* - this logic should NOT be modified
    try {
      _init();
    } catch (Exception e) {
      log("useradd Initialization Failure", e);
      throw e instanceof FacesException ? (FacesException) e : new FacesException(e);
    }

    // </editor-fold>
    // Perform application initialization that must complete
    // *after* managed components are initialized
    // TODO - add your own initialization code here
    }

  /**
   * <p>Callback method that is called after the component tree has been
   * restored, but before any event processing takes place.  This method
   * will <strong>only</strong> be called on a postback request that
   * is processing a form submit.  Customize this method to allocate
   * resources that will be required in your event handlers.</p>
   */
  @Override
  public void preprocess() {
  }

  /**
   * <p>Callback method that is called just before rendering takes place.
   * This method will <strong>only</strong> be called for the page that
   * will actually be rendered (and not, for example, on a page that
   * handled a postback and then navigated to a different page).  Customize
   * this method to allocate resources that will be required for rendering
   * this page.</p>
   */
  @Override
  public void prerender() {
  }

  /**
   * <p>Callback method that is called after rendering is completed for
   * this request, if <code>init()</code> was called (regardless of whether
   * or not this was the page that was actually rendered).  Customize this
   * method to release resources acquired in the <code>init()</code>,
   * <code>preprocess()</code>, or <code>prerender()</code> methods (or
   * acquired during execution of an event handler).</p>
   */
  @Override
  public void destroy() {
  }

  /**
   * <p>Return a reference to the scoped data bean.</p>
   *
   * @return reference to the scoped data bean
   */
  protected SessionBean1 getSessionBean1() {
    return (SessionBean1) getBean("SessionBean1");
  }

  /**
   * <p>Return a reference to the scoped data bean.</p>
   *
   * @return reference to the scoped data bean
   */
  protected ApplicationBean1 getApplicationBean1() {
    return (ApplicationBean1) getBean("ApplicationBean1");
  }

  /**
   * <p>Return a reference to the scoped data bean.</p>
   *
   * @return reference to the scoped data bean
   */
  protected RequestBean1 getRequestBean1() {
    return (RequestBean1) getBean("RequestBean1");
  }
  /*
  boolean showRegon = false;
  boolean showPesel = true;

  public boolean isShowPesel() {
  return !new_userType.getSelected().toString().equals("4");
  }

  public void setShowPesel(boolean showPesel) {
  this.showPesel = showPesel;
  }

  public boolean isShowRegon() {
  return new_userType.getSelected().toString().equals("4");
  }

  public void setShowRegon(boolean showRegon) {
  this.showRegon = showRegon;
  }
   */

  public String button1_action() {
    Fasada1 e = this.getApplicationBean1().getFasada();
    //String offer_id = Integer.toString(e.getOferty().size());

    HashMap<String, Object> arg2 = new HashMap();

    /* Budowa HashMapy tworzenia usera */
    String[] fields = {"login", "pesel", "additionalInf", "city", "houseNr",
      "mail", "nip", "name", "password", "phone", "postCode",
      "regon", "street",};
    TextField[] components = {new_login, new_pesel, new_additionalInf, new_city,
      new_houseNr, new_mail, new_NIP, new_name, new_password,
      new_phone, new_postCode, new_regon, new_street};
    ParamGenerator.parseStrFields(arg2, fields, components, false);

    arg2.put("userType", ParamGenerator.ConvertSelection(new_userType));

    User us = e.stworzUsera(arg2);

    if (us != null) { // HIBERNATE ADDON
     // this.getApplicationBean1().getFasadaHibernate().persistUser(us);
    }

    if (us != null) {
      this.getRequestBean1().setKomunikat("Pomyślnie dodano użytkownika");
      this.getRequestBean1().setNapis("Przejdź do listy użytkowników");
      this.getSessionBean1().setLink("listauzytkownikow");
      return "sukces";
    } else {
      this.getRequestBean1().setKomunikat("Utworzenie użytkownika zakończone niepowodzeniem");
      return "blad";
    }


  }

  public void new_userType_processValueChange(ValueChangeEvent event) {
    this.getRequestBean1().setShowRegon(new_userType.getSelected().toString().equals("4"));
    this.getRequestBean1().setShowPesel(!new_userType.getSelected().toString().equals("4"));
  }

  public void new_userType_validate(FacesContext context, UIComponent component, Object value) {
    this.getRequestBean1().setShowRegon(value.toString().equals("4"));
    this.getRequestBean1().setShowPesel(!value.toString().equals("4"));

  }
}

